Enunciado do Desafio:
Você acaba de receber um dataset dos funcionários de uma empresa. Objetivo principal é que você identifique fatores que tem influencia sobre o attrition, e assim, contribuir com insights para a área de Cultura e Pessoas da empresa. Sinta-se à vontade para construir os gráficos, análises estatísticas e modelo de machine learning que acharn necessário para prever o evento.
Esse notebook consiste em uma análise exploratória dos dados no dataset Dataset.xlsx, bem como a construção e comparação de 2 modelos de Machine Learning para classificar uma nova entrada como Attrition (1) ou não (0).
Ao rodar esse notebook, certifique-se que ele se encontra na mesma pasta que a planilha supracitada.
# Pacotes utilizados no notebook (descomentar e executar essa célula caso esteja rodando pela primeira vez)
# !pip install matplotlib
# !pip install numpy
# !pip install pandas
# !pip install pandas_profiling
# !pip install scipy
# !pip install seaborn
# !pip install sklearn
# !pip install statsmodels
# Importações das bibliotecas e métodos utilizados
# Bibliotecas core
import pandas as pd
import numpy as np
# Visualização de dados
import matplotlib.pyplot as plt
import seaborn as sns
from pandas_profiling import ProfileReport
# Testes de Hipóteses
from scipy.stats import ttest_ind
from statsmodels.stats.proportion import proportions_ztest
# Machine Learning
from sklearn.ensemble import RandomForestClassifier
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import (
classification_report,
precision_score,
recall_score,
f1_score,
plot_confusion_matrix,
plot_roc_curve,
plot_precision_recall_curve
)
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
pd.set_option('display.max_columns', None) # Forçar pandas a exibir todas as colunas de um dataframe
sns.set(style='whitegrid', rc={'figure.figsize':(9, 6)}) # Tamanho e estilo padrão dos gráficos
df_original = pd.read_excel('Dataset.xlsx', sheet_name='Dados')
print(df_original.shape)
df_original.head(10)
df_original.info()
df_original.describe()
EmployeeCount, StandardHours, Over18;# Limpeza do dataset: Tornar variáveis mais adequadas para profiling e análises
yes_no_map = {'Yes': 1, 'Y': 1, 'No': 0, 'N': 0}
gender_map = {'Male': 0, 'Female': 1}
education_map = { # Transformar em anos de escolaridade
1: 9, # Fundamental (9 anos) - impreciso!
2: 9+3, # Ensino Médio (+3 years)
3: 9+3+5, # Graduação (+5 years)
4: 9+3+5+2, # Mestrado (+2 years)
5: 9+3+5+2+4 # Doutorado (+4 years)
}
travel_map = {
'Non-Travel': 0,
'Travel_Rarely': 1,
'Travel_Frequently': 2
}
df = df_original.replace({
'Attrition': yes_no_map,
'BusinessTravel': travel_map,
'Education': education_map,
'Gender': gender_map,
'Over18': yes_no_map,
'OverTime': yes_no_map,
})
df.rename(columns={'EmployeeNumber':'ID'}, inplace=True)
df.set_index('ID', inplace=True)
df.drop(columns=['EmployeeCount', 'StandardHours', 'Over18'], inplace=True) # Constantes
print(df.shape)
df.head()
Geração de um relatório de perfil dos dados usando a biblioteca Pandas Profiling.
profile = ProfileReport(df.reset_index(drop=True), title="Pandas Profiling Report - Case Attrition")
profile